package es.udc.fbellas.j2ee.tiendaweb.model.productofacade.plain.actions;

import java.sql.Connection;
import java.util.List;

import es.udc.fbellas.j2ee.tiendaweb.model.detallespedido.DAO.SQLDetallesPedidoDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.detallespedido.DAO.SQLDetallesPedidoDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.detallespedido.TO.DetallesPedidoTO;
import es.udc.fbellas.j2ee.tiendaweb.model.lineapedido.DAO.SQLLineaPedidoDAO;
import es.udc.fbellas.j2ee.tiendaweb.model.lineapedido.DAO.SQLLineaPedidoDAOFactory;
import es.udc.fbellas.j2ee.tiendaweb.model.lineapedido.TO.LineaPedidoTO;
import es.udc.fbellas.j2ee.tiendaweb.model.productofacade.TO.PedidoChunkTO;
import es.udc.fbellas.j2ee.util.exceptions.InternalErrorException;
import es.udc.fbellas.j2ee.util.sql.NonTransactionalPlainAction;

public class VisualizarPedidoAction implements NonTransactionalPlainAction {

    private int inicio;
    private int elemPorGrupo;
    private int idPedido;
	
	public VisualizarPedidoAction(int idPedido,int inicio, int elemPorGrupo) {
        this.inicio = inicio;
        this.elemPorGrupo = elemPorGrupo;
        this.idPedido=idPedido;
	}

    /**
     *
     * @return An instance of <code>LineasPedidoChunkVO</code> objects.
     */
    public Object execute(Connection connection) 
        throws InternalErrorException {

        /* 
         * Find count+1 accounts to determine if there exist more accounts
         * above the specified range.
         */                
    	
        SQLDetallesPedidoDAO detallesPedidoDAO = SQLDetallesPedidoDAOFactory.getDAO();            
        DetallesPedidoTO detallesPedidoTO = detallesPedidoDAO.find(connection, idPedido);
        
        SQLLineaPedidoDAO lineasPedidoDAO = SQLLineaPedidoDAOFactory.getDAO();            
        List<LineaPedidoTO> lineaPedidoTOs = lineasPedidoDAO.findByIdPedido
        (connection, idPedido, inicio, elemPorGrupo+1);
        System.out.println("SE VA A PROCEDER A VISUALIZAR");
        boolean existMasLineas = lineaPedidoTOs.size() == (elemPorGrupo+1);

        /* 
         * Remove the last account from the returned list if there exist more
         * accounts above the specified range.
         */
        if (existMasLineas) {
            lineaPedidoTOs.remove(lineaPedidoTOs.size()-1);
        }
        
        return new PedidoChunkTO(detallesPedidoTO,lineaPedidoTOs, existMasLineas);                    

    }
    
    /* 
     * This class is tested by
     * "es.udc.fbellas.j2ee.minibank.model.accountfacade.delegate.
     * AccountFacadeDelegateFactory".
     */
}
